/**
 * API端点管理API
 */

import type {
  ApiEndpointPageQuery,
  ApiEndpointRequest,
  ApiEndpointVO,
  ApiStatistics,
  EndpointPathCheckQuery
} from "./type"
import { http } from "@/http/index"

/** API端点管理API */
export const endpointsApi = {
  /**
   * 获取API端点列表
   * @param params 查询参数
   */
  getEndpoints: (params: ApiEndpointPageQuery = {}) => {
    return http.get<PageData<ApiEndpointVO>>("/endpoints", { params })
  },

  /**
   * 获取API端点详情
   * @param endpointId 端点ID
   */
  getEndpointDetail: (endpointId: number) => {
    return http.get<ApiEndpointVO>(`/api/endpoints/${endpointId}`)
  },

  /**
   * 创建API端点
   * @param params API端点配置参数
   */
  createEndpoint: (params: ApiEndpointRequest) => {
    return http.post<number>("/endpoints", params)
  },

  /**
   * 更新API端点
   * @param endpointId 端点ID
   * @param params API端点配置参数
   */
  updateEndpoint: (endpointId: number, params: ApiEndpointRequest) => {
    return http.put<void>(`/api/endpoints/${endpointId}`, params)
  },

  /**
   * 删除API端点
   * @param endpointIds 端点ID列表
   */
  deleteEndpoints: (endpointIds: number[]) => {
    return http.delete<void>("/endpoints", { data: endpointIds })
  },

  /**
   * 根据表生成API端点
   * @param tableId 表ID
   * @param projectId 项目ID
   */
  generateEndpointsByTable: (tableId: number, projectId: number) => {
    return http.post<ApiEndpointVO[]>(`/api/endpoints/generate/table/${tableId}`, null, {
      params: { projectId }
    })
  },

  /**
   * 批量生成API端点
   * @param tableIds 表ID列表
   * @param projectId 项目ID
   */
  generateEndpointsBatch: (tableIds: number[], projectId: number) => {
    return http.post<ApiEndpointVO[]>("/endpoints/generate/batch", tableIds, {
      params: { projectId }
    })
  },

  /**
   * 获取API统计信息
   * @param projectId 项目ID
   */
  getApiStatistics: (projectId: number) => {
    return http.get<ApiStatistics>("/endpoints/statistics", {
      params: { projectId }
    })
  },

  /**
   * 检查端点路径唯一性
   * @param params 检查参数
   */
  checkEndpointPathUnique: (params: EndpointPathCheckQuery) => {
    return http.get<boolean>("/endpoints/check-path", { params })
  }
}

export * from "./type"
